/**
 * 通用指令和输出格式规范
 * 适用于Web端和移动端需求文档生成
 */

/**
 * 获取用户提示词(通用部分)
 */
export function getUserPrompt(htmlContent: string): string {
  return `请严格按照上述解析策略分析以下HTML文件,生成结构化的需求文档。

⚠️ **重要提醒**:
1. 必须严格按照"页面类型识别"章节的优先级进行判断
2. 必须区分"查询条件"和"表单字段"
3. 列表页必须提取"列表展示字段"
4. 必须提取所有下拉框的选项值
5. 必须从原型注释/备注表格中提取业务规则(尤其是红色文字规则)
6. 必须识别所有弹窗并为其创建独立章节
7. 所有术语必须使用中文

HTML内容:
\`\`\`html
${htmlContent}
\`\`\``;
}

/**
 * 获取补充业务规则的系统提示词
 */
export function getBusinessRulesSystemPrompt(businessRules: string[]): string {
  if (businessRules.length === 0) {
    return '';
  }

  return `

# 📌 补充业务规则(用户提供)

用户提供了以下补充的业务规则,请在生成需求文档时将这些规则融入到对应的章节中:

${businessRules.map((rule, index) => `${index + 1}. ${rule}`).join('\n')}

**处理方式**:
- 如果规则与HTML中提取的规则相关,合并到"业务规则"章节
- 如果规则涉及特定字段的验证,添加到"表单字段"表格的"验证规则"列
- 如果规则涉及按钮的触发条件,添加到"操作按钮"表格的"触发条件"列
- 如果是通用的系统级规则,放在需求文档末尾的"系统级规则"章节
- 保持规则的原始表述,不要过度改写
- 重要规则可以加 ⚠️ 标记强调

**示例**:
用户提供规则: "订单金额超过10000元需要财务主管审核"
→ 应添加到"业务规则"章节或"交互说明"中的审核相关部分
`;
}

/**
 * 获取Markdown格式规范说明
 */
export function getMarkdownFormatInstructions(): string {
  return `

# 📐 Markdown格式规范

## 标题层级规范
\`\`\`markdown
# 一级标题: 文档标题(系统名称-模块名称需求文档)
## 二级标题: 功能模块(1. 功能模块1)
### 三级标题: 功能点(1.1 功能点名称)
#### 四级标题: 子章节(功能描述、页面类型、查询条件、列表展示字段等)
##### 五级标题: 子功能点的子章节(如多状态画面的各状态)
\`\`\`

## 表格格式规范
- 必须使用Markdown表格语法
- 表头和数据行之间用 \`|-----|\` 分隔
- 每列用 \`|\` 分隔
- 表格前后要有空行

**示例**:
\`\`\`markdown
#### 查询条件
| 字段名 | 控件类型 | 必填 | 默认值 | 说明 | 来源 |
|--------|---------|------|--------|------|------|
| 订单号 | 文本框 | 否 | - | 输入订单号进行搜索 | 查询区域input |
| 订单状态 | 下拉框 | 否 | 全部 | 选择订单状态筛选 | 查询区域select |
\`\`\`

## 列表格式规范
- 使用数字编号(1. 2. 3.)或(1、2、3、)
- 保持一致的编号风格
- 子列表使用缩进和 \`-\` 或 \`*\`

**示例**:
\`\`\`markdown
#### 业务规则
1. 订单金额必须大于0
2. 审核流程规则:
   - 平台采购点击审核通过后,礼品公司方可进入下一步
   - 审核同意时需要校验库存是否能扣减成功
3. 导出规则: 除操作栏,其他字段均需导出
\`\`\`

## 分隔线使用
- 在大章节之间使用 \`---\` 分隔
- 不要过度使用,保持文档整洁

## 特殊标记使用
- ⚠️ : 标记重要规则(从红色文字提取)
- 🔥 : 标记关键信息
- ✅ : 标记正确做法
- ❌ : 标记错误做法
- 🆕 : 标记新增功能
- ✏️ : 标记修改功能
- 📱 : 标记移动端相关
- 🖥️ : 标记Web端相关

## 代码块使用
- 如果需要展示HTML示例,使用 \`\`\`html
- 如果需要展示JSON,使用 \`\`\`json
- 如果需要展示API,使用 \`\`\`http

---

# ✅ 质量检查清单

生成需求文档后,请自检以下项目:

## 📋 基础检查
- [ ] 文档标题是否包含系统名称和模块名称?
- [ ] 所有章节是否使用中文术语?(不要出现list、form、dialog等英文)
- [ ] 是否正确识别了页面类型?(列表页/表单页/详情页/弹窗)
- [ ] 表格格式是否正确?(有表头、分隔线、数据行)

## 🔍 内容完整性检查
- [ ] 列表页是否包含"列表展示字段"章节?
- [ ] 是否提取了所有下拉框的选项值?
- [ ] 是否区分了"查询条件"和"表单字段"?
- [ ] 操作按钮是否去重?(如"详情"按钮在每行都有,只记录一条)
- [ ] 是否提取了Axure注释表格中的业务规则?
- [ ] 是否识别了所有红色文字规则并加⚠️标记?

## 🏷️ 来源标注检查
- [ ] 所有字段是否标注了来源?(如"查询区域input"、"表格列头"、"input标签")
- [ ] 弹窗是否标注了来源?(如"来源: data-label='审核弹窗'")

## 📱 移动端专项检查(仅移动端)
- [ ] 是否识别了所有隐藏元素(display:none)?
- [ ] 是否通过坐标判断了同位置多状态画面?
- [ ] 是否为每个状态创建了独立子章节?
- [ ] 是否添加了"状态切换说明"?
- [ ] 是否说明了下拉刷新/上拉加载?(如果有)
- [ ] 是否说明了手势操作?(如果有)
- [ ] 是否说明了权限申请场景?(如果有)

## 🎯 业务规则检查
- [ ] 是否提取了所有注释表格中的规则?
- [ ] 是否保留了规则的完整表述?(不要简化或改写)
- [ ] 红色文字规则是否特别标注(⚠️)?
- [ ] 用户提供的补充规则是否融入到文档中?

---

# 🚨 常见错误及修正

## 错误1: 页面类型识别错误
❌ **错误**: 将有"保存"、"撤销"按钮的表单页识别为详情页
✅ **正确**: 按钮优先级最高,"保存"/"撤销"按钮 → 表单页

## 错误2: 查询条件和表单字段混淆
❌ **错误**: 将查询区域的输入框归类为表单字段
✅ **正确**: "搜索"/"查询"按钮附近的输入框 → 查询条件

## 错误3: 列表展示字段缺失
❌ **错误**: 列表页只提取了查询条件,没有列表展示字段
✅ **正确**: 列表页必须有"列表展示字段"章节,从表格列头提取

## 错误4: 按钮重复记录
❌ **错误**: "详情"按钮出现10次,记录了10条
✅ **正确**: 只记录1条,位置标注"表格操作列(每行)"

## 错误5: 下拉框选项遗漏
❌ **错误**: 只记录"订单状态"字段,没有提取选项
✅ **正确**: 可选值/枚举列填写"待审核/已审核/已完成/已取消"

## 错误6: 业务规则提取不完整
❌ **错误**: 忽略了Axure注释表格中的业务规则
✅ **正确**: 必须从"备注"、"需求描述"列提取所有规则

## 错误7: 红色文字规则遗漏
❌ **错误**: 没有识别原型中的红色文字
✅ **正确**: 查找 style="color:#D9001B" 或 style="color:red",作为核心规则提取

## 错误8: 术语使用英文
❌ **错误**: 页面类型写"form page"、控件类型写"input"
✅ **正确**: 页面类型写"表单页"、控件类型写"文本框"

## 错误9: 弹窗识别错误(移动端)
❌ **错误**: 将用户信息下拉框识别为弹窗
✅ **正确**: 只识别业务操作弹窗,忽略导航下拉框

## 错误10: 多状态画面遗漏(移动端)
❌ **错误**: 只识别了可见画面,忽略了隐藏状态(display:none)
✅ **正确**: 必须识别所有隐藏元素,通过坐标判断同位置多状态画面

---

请严格遵守以上规范,生成高质量的需求文档!
`;
}

/**
 * 获取完整的通用系统提示词(包含格式规范和质量检查)
 */
export function getCommonSystemInstructions(): string {
  return getMarkdownFormatInstructions();
}
